<?php
+
+use Wikimedia\AtEase\AtEase;
+
/**
* Methods to play with strings.
*
return new ArrayIterator( explode( $separator, $subject ) );
}
}
+
+ /**
+ * Utility function to check if the given string is a valid regex. Avoids
+ * manually calling suppressWarnings and restoreWarnings, and provides a
+ * one-line solution without the need to use @.
+ *
+ * @since 1.34
+ * @param string $string The string you want to check being a valid regex
+ * @return bool
+ */
+ public static function isValidRegex( $string ) {
+ AtEase::suppressWarnings();
+ // @phan-suppress-next-line PhanParamSuspiciousOrder False positive
+ $isValid = preg_match( $string, '' );
+ AtEase::restoreWarnings();
+ return $isValid !== false;
+ }
}
'noncharacters 2' => [ $PASS, "\xef\xbf\xbf" ],
];
}
+
+ /**
+ * @param strin $input
+ * @param bool $expected
+ * @dataProvider provideRegexps
+ * @covers StringUtils::isValidRegex
+ */
+ public function testIsValidRegex( $input, $expected ) {
+ $this->assertSame( $expected, StringUtils::isValidRegex( $input ) );
+ }
+
+ /**
+ * Data provider for testValidRegex
+ */
+ public static function provideRegexps() {
+ return [
+ [ 'foo', false ],
+ [ '/foo/', true ],
+ [ '//', true ],
+ [ '/(foo/', false ],
+ [ '!(f[o]{2})!', true ],
+ [ '/foo\/', false ]
+ ];
+ }
}